package com.ruoyi.system.service.impl;

import java.util.List;
import java.util.Map;

import com.ruoyi.common.utils.uuid.UUID;
import com.ruoyi.system.domain.DeptZhuanjia;
import com.ruoyi.system.domain.ZhuanjiaCustom;
import com.ruoyi.system.mapper.DeptZhuanjiaMapper;
import com.ruoyi.system.service.IDeptidOlddeptidService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.ZhuanjiaMapper;
import com.ruoyi.system.domain.Zhuanjia;
import com.ruoyi.system.service.IZhuanjiaService;
import com.ruoyi.common.core.text.Convert;
import org.springframework.transaction.annotation.Transactional;

/**
 * 专家信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2022-12-06
 */
@Service
public class ZhuanjiaServiceImpl implements IZhuanjiaService 
{
    @Autowired
    private ZhuanjiaMapper zhuanjiaMapper;

    @Autowired
    private DeptZhuanjiaMapper deptZhuanjiaMapper;

    @Autowired
    private IDeptidOlddeptidService deptidOlddeptidService;
    /**
     * 查询专家信息
     * 
     * @param zhuanjiaid 专家信息主键
     * @return 专家信息
     */
    @Override
    public Zhuanjia selectZhuanjiaByZhuanjiaid(String zhuanjiaid)
    {
        return zhuanjiaMapper.selectZhuanjiaByZhuanjiaid(zhuanjiaid);
    }

    /**
     * 查询专家信息列表
     * 
     * @param zhuanjia 专家信息
     * @return 专家信息
     */
    @Override
    public List<Zhuanjia> selectZhuanjiaList(Zhuanjia zhuanjia)
    {
        return zhuanjiaMapper.selectZhuanjiaList(zhuanjia);
    }

    /**
     * 新增专家信息
     * 
     * @param zhuanjia 专家信息
     * @return 结果
     */
    @Override
    public int insertZhuanjia(Zhuanjia zhuanjia)
    {
        return zhuanjiaMapper.insertZhuanjia(zhuanjia);
    }

    /**
     * 修改专家信息
     * 
     * @param zhuanjia 专家信息
     * @return 结果
     */
    @Override
    public int updateZhuanjia(Zhuanjia zhuanjia)
    {
        return zhuanjiaMapper.updateZhuanjia(zhuanjia);
    }

    /**
     * 批量删除专家信息
     * 
     * @param zhuanjiaids 需要删除的专家信息主键
     * @return 结果
     */
    @Override
    public int deleteZhuanjiaByZhuanjiaids(String zhuanjiaids)
    {
        return zhuanjiaMapper.deleteZhuanjiaByZhuanjiaids(Convert.toStrArray(zhuanjiaids));
    }

    /**
     * 删除专家信息信息
     * 
     * @param zhuanjiaid 专家信息主键
     * @return 结果
     */
    @Override
    public int deleteZhuanjiaByZhuanjiaid(String zhuanjiaid)
    {
        return zhuanjiaMapper.deleteZhuanjiaByZhuanjiaid(zhuanjiaid);
    }
    /**
     * 查询专家信息列表custom
     *
     * @param zhuanjia 专家信息
     * @return map
     */
    @Override
    public List<Map<String,Object>> selectZhuanjiaListCustom(ZhuanjiaCustom zhuanjia)
    {
        zhuanjia.setStartindex((zhuanjia.getPageindex() - 1) * zhuanjia.getPagesize());

        return zhuanjiaMapper.selectZhuanjiaListCustom(zhuanjia);
    }

    @Override
    public int countZhuanjiaListCustom(ZhuanjiaCustom zhuanjia){
        return zhuanjiaMapper.countZhuanjiaListCustom(zhuanjia);
    }
    /**
     * 专家管理查询统计列表
     */
    @Override
    public List<Map<String,Object>> chaxuntongjilist(String deptid,
                                                     String zhuanjia,
                                                     String danwei,
                                                     String danweileixing,
                                                     String cengji,
                                                     String gongzuodanwei,
                                                     String guoji,
                                                     String zhengjianleixing,
                                                     String zhengjianhaoma,
                                                     String ruxuannianfen,
                                                     String zhuanjiazhuangtai,
                                                     String zhuanjiazhuangtaibiandongshijian,
                                                     int pageindex, int pagesize)
    {
        int mmStartIndex = (pageindex - 1) * pagesize;
        return zhuanjiaMapper.chaxuntongjilist(deptid,zhuanjia,danwei,danweileixing,cengji,gongzuodanwei,guoji,
                zhengjianleixing,zhengjianhaoma,ruxuannianfen,zhuanjiazhuangtai,zhuanjiazhuangtaibiandongshijian,mmStartIndex,pagesize);
    }
    @Override
    public int chaxuntongjilistCount(String deptid,
                                                     String zhuanjia,
                                                     String danwei,
                                                     String danweileixing,
                                                     String cengji,
                                     String gongzuodanwei,
                                                     String guoji,
                                                     String zhengjianleixing,
                                                     String zhengjianhaoma,
                                                     String ruxuannianfen,
                                                     String zhuanjiazhuangtai,
                                                     String zhuanjiazhuangtaibiandongshijian)
    {
        return zhuanjiaMapper.chaxuntongjilistCount(deptid,zhuanjia,danwei,danweileixing,cengji,gongzuodanwei,guoji,
                zhengjianleixing,zhengjianhaoma,ruxuannianfen,zhuanjiazhuangtai,zhuanjiazhuangtaibiandongshijian);
    }

    /**
     * 专家管理查询统计列表 单位普通管理员
     */
    @Override
    public List<Map<String,Object>> chaxuntongjilistCommon(String deptid,
                                                     String zhuanjia,
                                                     String danwei,
                                                     String danweileixing,
                                                     String cengji,
                                                           String gongzuodanwei,
                                                     String guoji,
                                                     String zhengjianleixing,
                                                     String zhengjianhaoma,
                                                     String ruxuannianfen,
                                                     String zhuanjiazhuangtai,
                                                     String zhuanjiazhuangtaibiandongshijian,
                                                     int pageindex, int pagesize)
    {
        int mmStartIndex = (pageindex - 1) * pagesize;
        return zhuanjiaMapper.chaxuntongjilistCommon(deptid,zhuanjia,danwei,danweileixing,cengji,gongzuodanwei,guoji,
                zhengjianleixing,zhengjianhaoma,ruxuannianfen,zhuanjiazhuangtai,zhuanjiazhuangtaibiandongshijian,mmStartIndex,pagesize);
    }
    @Override
    public int chaxuntongjilistCommonCount(String deptid,
                                                           String zhuanjia,
                                                           String danwei,
                                                           String danweileixing,
                                                           String cengji,
                                           String gongzuodanwei,
                                                           String guoji,
                                                           String zhengjianleixing,
                                                           String zhengjianhaoma,
                                                           String ruxuannianfen,
                                                           String zhuanjiazhuangtai,
                                                           String zhuanjiazhuangtaibiandongshijian)
    {
        return zhuanjiaMapper.chaxuntongjilistCommonCount(deptid,zhuanjia,danwei,danweileixing,cengji,gongzuodanwei,guoji,
                zhengjianleixing,zhengjianhaoma,ruxuannianfen,zhuanjiazhuangtai,zhuanjiazhuangtaibiandongshijian);
    }
    @Transactional
    @Override
    public boolean hezeng(Zhuanjia ppZhuanjia,String ppDeptId){
        boolean ok = true;

        //临时用于检查存在
        Zhuanjia tempZhuanjia = new Zhuanjia();
        tempZhuanjia.setZhengjianhaoma(ppZhuanjia.getZhengjianhaoma());
        List<Zhuanjia> mmZhuanjiaList = this.selectZhuanjiaList(tempZhuanjia);
        if (mmZhuanjiaList.size()>0){
            ok = false;
            throw new RuntimeException("该专家已存在");
        }

        ppZhuanjia.setZhuanjiaid(UUID.randomUUID().toString());
        ppZhuanjia.setZhuanjiazhuangtai("10");
        ppZhuanjia.setIsvalid((long)0);
        if(this.insertZhuanjia(ppZhuanjia)!=1){
            ok = false;
            throw new RuntimeException("添加专家失败");
        }

        DeptZhuanjia mmDeptZhuanjia = new DeptZhuanjia();
        mmDeptZhuanjia.setId(UUID.randomUUID().toString());
        mmDeptZhuanjia.setZhuanjiaid(ppZhuanjia.getZhuanjiaid());
        mmDeptZhuanjia.setDeptid(deptidOlddeptidService.DeptIdToOldDeptId(ppDeptId));
        mmDeptZhuanjia.setXingming(ppZhuanjia.getXingming());
        mmDeptZhuanjia.setIsvalid((long)1);
        if (deptZhuanjiaMapper.insertDeptZhuanjia(mmDeptZhuanjia)!=1){
            ok = false;
            throw new RuntimeException("添加单位专家关系失败");
        }

        return ok;
    }

    /**
     * @param deptid
     * @return
     */
    @Override
    public Map<String, Integer> Countchaxuntongji(String deptid) {
        return zhuanjiaMapper.Countchaxuntongji(deptid);
    }
    /**
     * @param deptid
     * @return
     */
    @Override
    public Map<String, Integer> Countchaxuntongjicommon(String deptid) {
        return zhuanjiaMapper.Countchaxuntongjicommon(deptid);
    }
}
